import axios from "axios"

export default {
    namespaced: true,
    state() {
        return {
            // 购物车的数据
            list: []
        }
    },
    // 组件中单向数据流，通过mutations来修改state中的数据
    mutations: {
        updateList(state, newList) {
            state.list = newList
        },
        updateCount(state, obj) {
            // 找到对应的数据，修改count值
            const goods = state.list.find(item => item.id === obj.id)
            goods.count = obj.newCount
        }
    },
    // 异步交互 -- 请求数据
    actions: {
        async getList(context) {
            const res = await axios.get("http://localhost:3000/cart")
            // 通过mutations修改state中的数据
            context.commit("updateList", res.data)
        },
        async updateCount(context, obj) {
            const res = await axios.patch(`http://localhost:3000/cart/${obj.id}`, {
                count: obj.newCount
            })
            // 通过mutations修改state中的数据
            context.commit("updateCount", {
                id: obj.id,
                newCount: obj.newCount
            })
        }
    },
    getters: {
        // 商品总数量
        total(state) {
            return state.list.reduce((sum, item) => (sum + item.count), 0)
        },
        //商品总价格 累加count * price
        totalPrice(state) {
            return state.list.reduce((sum, item) => (sum + item.count * item.price), 0)
        }
    }

}
